Maven打包SpringBoot项目,排除第三方依赖包

您所在的位置:网站首页 spring 打包时去除没用到的类 Maven打包SpringBoot项目,排除第三方依赖包

Maven打包SpringBoot项目,排除第三方依赖包

2024-05-22 23:47| 来源: 网络整理| 查看: 265

一、缘起 image.png

看了朱老大的微博,这不说的正是我嘛!日常开发部署的过程中,我也会自己探索引入一些maven的自动化部署,但是,到了关键性的上传服务器这一步,确实没有再精进一步。在项目依赖越多越多的情况下,打包上传确实是一件费时的事情。所以,按照朱老大的思路,我也尝试给我的项目包瘦瘦身。

二、运行环境

操作系统:Windows 10 ; 开发工具:IDEA-2019.3; Web服务器:Tomcat 9.0.24; JDK版本: jdk 1.8.0_221; Maven版本:apache-maven-3.6.1 Spring boot 版本:2.0.9.RELEASE

三、原理分析

工欲善其事,必先利其器。想要把功能做好,就要先明白背后的原理。原理理解清楚了,实际操作可谓是手到擒来。

1. maven打包spring boot项目,配置pom.xml,将第三方的依赖包排除在项目包之外。 2. 首次打包之后,把项目包上传到服务器,同时也要把第三方依赖包上传到服务器。

以后部署的时候,第三方依赖包没有发生变化得话,就不用再次上传了。要想实现这样一个目的,就像调整pom.xml中相关配置false。

3. 在服务器运行项目包,要配置项目包引用到第三方依赖包。 打成jar包的话,这里也可以由两种方式。第一种,就是在pom.xml中配置了第三方包的依赖的位置,在部署运行的时候,项目包自己会找到第三方依赖包的位置,这和以前的部署方式没有两样;第二种,是利用如下命令参数java -Dloader.path=lib/ -Dfile.encoding=utf-8 -jar abc-api-1.0.0-SNAPSHOT-exec.jar。其中,loader.path参看官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#executable-jar-launching。其中,有解释是这样的:loader.path can contain directories (which are scanned recursively for jar and zip files), archive paths, a directory within an archive that is scanned for jar files (for example, dependencies.jar!/lib), or wildcard patterns (for the default JVM behavior). Archive paths can be relative to loader.home or anywhere in the file system with a jar:file: prefix.。大概的意思就是:配置了这个参数的目录,运行项目包的时候,就会去扫描该目录下的第三方依赖包。 看了这么多,我的感触就是,知识太过庞杂了。就拿这个参数来说,这个知识点可能是jdk里的,也可以说spring boot里的。但是,在此之前,我还是不确定的。再说,中文互联网的内容太过杂乱,搜索寻找起来就格外的费力。 打成war的话,我们可以把第三方依赖包放到tomcat的/lib目录中,这样,项目就可以自动找到了。但是,/lib目录下面本来就有许多自带的jar包了,为了防止混淆,可以在/lib目录下建一个ext目录,来将项目要用到的第三方依赖包放在此处。 但是tomcat是无法识别这个ext目录里面的jar包的,此时需要修改tomcat配置文件${catalina.home}/conf/catalina.properties中的 common.loader值,加上${catalina.home}/lib/ext/*.jar,完成此步骤后,项目启动便可以使用到lib/ext里面的jar包了。 四、实际操作 1.jar包方式打包 pom.xml 中的配置如下,里面详细解释了配置的含义。 4.0.0 org.springframework.boot spring-boot-starter-parent 2.0.9.RELEASE com.keqing kafka3 0.0.1 kafka3 jar org.apache.maven.plugins maven-dependency-plugin copy-dependencies ${project.build.directory}/lib provided false org.apache.maven.plugins maven-jar-plugin true ./lib/ org.springframework.boot spring-boot-maven-plugin nothing nothing 2.war包方式打包

1.pom.xml配置如下,里面一样又详细的说明

4.0.0 org.springframework.boot spring-boot-starter-parent 2.0.9.RELEASE com.keqing kafka3 0.0.1 kafka3 war kafka org.apache.maven.plugins maven-dependency-plugin copy-dependencies ${project.build.directory}/lib provided false org.apache.maven.plugins maven-war-plugin WEB-INF/lib/*.jar org.springframework.boot spring-boot-maven-plugin nothing nothing 五、总结

写这篇小文,真是煞费苦心。难在哪里呢?难在涉及的知识太过庞杂。比如,有关maven的占位符问题,这个本来就是我的一个知识盲点,在看到很多地方用到这方面的配置,并且又和spring boot交织在一块的时候,我更是一脑袋的浆糊了。所以,关于这个知识点,我还要另起一文,专门来阐述。 比如,有关java命令行的使用。有关maven插件的使用和配置,maven插件运行的原理,有关spring boot打包的原理,spring boot打成的包的结构特点,springboot打成的包的运行原理,tocmat的目录结构的含义。 其实,看起来很多,但是,都是基础性知识的复杂运用。也说明自身基础知识掌握的不够牢靠。 尤其,对于maven 还是一知半解。然后,spring boot 又是基于maven的。在maven的基础上,又对maven做了扩展配置。让问题一下子变得更加复杂了。我也感受到spring boot 知识的庞杂。仅仅是官方文档,里面就有我需要的很多很多的答案。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3